Modern software applications typically rely on a modularized architecture where several different software modules, built within a common framework, target a well-defined set of functionality. The advantages of such an architecture are numerous. For instance, a modular structure eases the process of code debugging during the development cycle and give developers the ability to add new features to applications requiring minimal alterations to existing code. One common framework applications can be structured around is referred to by those of ordinary skill in the art as a component object framework. A component object framework supports the underlying architecture of the program by using a set of Application Programming Interfaces (API) to support component (i.e. module) development. Examples of component object frameworks are the Component Object Model (COM) from Microsoft Corporation™ and the JAVA™ Standard Development Kit from Sun Microsystems™. In these frameworks, individual components contain a well-circumscribed set of functionality.
In addition, components often need to communicate with one another. For example, a component may access data and manipulate it while a different component is accessing the same data. In this case activities of both components must be coordinated to ensure data integrity. Some components may be specialized in capturing user input and need to notify other components about user events. Yet, other components may be specialized in detecting system events that are of importance to other components. Existing component object frameworks offer, as part of their API supporting component development, a framework (e.g., additional APIs) for inter-component communication.
In Microsoft's COM, a mechanism that supports inter-component communication is known as The Connection Point Mechanism. Connection Points typically provide a mechanism for allowing a first component (e.g. a server) to notify a second component (e.g., a client) of an event for which the client requests a notification, when that event occurs in the server. In component object frameworks, the client typically connects to the server using a common interface, passes to the server requests for specific notification types, and provides information about how the server should notify the client of specific events. In inter-component communication models, the client calls the server with arguments indicating the type of notification requested, and a method in the client interface the server is to call when an event to a specific type is executed. In the component object framework, the method to be called by the server is usually implemented in a separate component called a Listener. A variety of listeners may be implemented by a component to achieve communication with other components.
Swing, a JAVA based component object framework also developed by Sun Microsystems and the Microsoft™ Component Object Model, are both frameworks for developing graphical applications. Both of these object frameworks support an inter-component communication framework. Swing and Java provide an event/communication model that relies on direct communication and direct knowledge between objects in the system. With the Swing model, there are two types of objects: a broadcaster (call it B), and a listener (call it L), and an interface (call it I). For any interface on which the broadcaster is to broadcast an event, the interface implements the methods addIListener and removeIListener. The listener object must implement this interface, and pass it as an argument to the addIListener method on the broadcaster. The Java Swing model requires that the listener know of the broadcaster, and specifically register against it.
Microsoft COM, on the other hand, provides an implementation of The Connection Points Mechanism where the client typically connects to the server using a common interface, passes to the server requests for specific notification types, and provides information about how the server should notify the client of specific events. The intended use of connection points within COM is to allow a host to communicate with a set of components, with the host having knowledge of these components. However, the Swing model and Microsoft COM models both fail to provide a flexible global communication mechanism. Therefore, there is a need for a global communication mechanism that provides components with a flexible way to establish communication links with each other.